/**
 * 电子产品类，继承自商品基类
 * 包含电子产品特有的属性和方法
 */
public class ElectronicProduct extends Product {
    private String brand;      // 品牌
    private String model;      // 型号
    private int warrantyPeriod; // 保修期（月）
    private String specs;      // 技术规格

    /**
     * 构造方法
     * @param productId 商品编号
     * @param name 商品名称
     * @param price 商品价格
     * @param description 商品描述
     * @param stock 库存数量
     * @param brand 品牌
     * @param model 型号
     * @param warrantyPeriod 保修期（月）
     * @param specs 技术规格
     * @throws InvalidPriceException 当价格无效时抛出异常
     */
    public ElectronicProduct(String productId, String name, double price, String description, int stock,
                           String brand, String model, int warrantyPeriod, String specs) throws InvalidPriceException {
        super(productId, name, price, description, stock);
        this.brand = brand != null ? brand : "";
        this.model = model != null ? model : "";
        this.warrantyPeriod = Math.max(0, warrantyPeriod);  // 确保保修期不为负数
        this.specs = specs != null ? specs : "";
    }

    /**
     * 获取品牌
     * @return 品牌名称
     */
    public String getBrand() {
        return brand;
    }

    /**
     * 设置品牌
     * @param brand 品牌名称，自动处理null值
     */
    public void setBrand(String brand) {
        this.brand = brand != null ? brand : "";
    }

    /**
     * 获取型号
     * @return 产品型号
     */
    public String getModel() {
        return model;
    }

    /**
     * 设置型号
     * @param model 产品型号，自动处理null值
     */
    public void setModel(String model) {
        this.model = model != null ? model : "";
    }

    /**
     * 获取保修期
     * @return 保修期（月）
     */
    public int getWarrantyPeriod() {
        return warrantyPeriod;
    }

    /**
     * 设置保修期
     * @param warrantyPeriod 保修期（月），确保不为负数
     */
    public void setWarrantyPeriod(int warrantyPeriod) {
        this.warrantyPeriod = Math.max(0, warrantyPeriod);
    }

    /**
     * 获取技术规格
     * @return 技术规格描述
     */
    public String getSpecs() {
        return specs;
    }

    /**
     * 设置技术规格
     * @param specs 技术规格描述，自动处理null值
     */
    public void setSpecs(String specs) {
        this.specs = specs != null ? specs : "";
    }

    /**
     * 获取保修信息
     * @return 保修信息字符串
     */
    public String getWarrantyInfo() {
        return brand + " " + model + " 提供 " + warrantyPeriod + " 个月保修服务";
    }

    /**
     * 检查是否有扩展保修
     * @return 是否有扩展保修
     */
    public boolean hasExtendedWarranty() {
        return warrantyPeriod > 12;  // 假设标准保修为12个月
    }

    /**
     * 扩展父类的折扣价格计算方法
     * 电子产品可能有特殊折扣规则
     * @param discountRate 折扣率
     * @return 折扣后的价格
     * @throws InvalidPriceException 当折扣无效时抛出异常
     */
    @Override
    public double calculateDiscountPrice(double discountRate) throws InvalidPriceException {
        double baseDiscountPrice = super.calculateDiscountPrice(discountRate);
        // 对于高端电子产品，可以提供额外的折扣
        if (this.hasExtendedWarranty()) {
            return baseDiscountPrice * 0.95;  // 额外5%折扣
        }
        return baseDiscountPrice;
    }

    /**
     * 实现父类的抽象方法，提供电子产品的详细信息
     * @return 电子产品详细信息
     */
    @Override
    public String getDetails() {
        StringBuilder details = new StringBuilder();
        details.append(super.toString()).append("\n");
        details.append("类型: 电子产品\n");
        details.append("品牌: " + brand + "\n");
        details.append("型号: " + model + "\n");
        details.append("保修期: " + warrantyPeriod + " 个月\n");
        details.append("技术规格: " + specs + "\n");
        details.append("描述: " + getDescription());
        return details.toString();
    }

    /**
     * 返回电子产品的字符串表示形式
     * @return 包含电子产品基本信息的字符串
     */
    @Override
    public String toString() {
        return super.toString() + ", 品牌: " + brand + ", 型号: " + model;
    }
}